package com.shadow.demo.common.util;

import com.shadow.demo.common.enums.excel.BaseEnum;

import java.util.EnumSet;

/**
 * 枚举处理工具类.
 */
public final class EnumUtil {

    private EnumUtil() {
    }

    /**
     * 根据枚举值获取枚举对象.
     * @param clazz 目标枚举类
     * @param value 枚举值
     * @param <T> 解析的枚举对象
     * @param <V> 传入的枚举值Value类型
     * @return {@link T} 枚举对象
     **/
    public static <T extends Enum<T> & BaseEnum<V>, V> T getByValue(final Class<T> clazz, final V value) {
        return EnumSet.allOf(clazz)
                .stream()
                .filter(x -> x.getValue().equals(value))
                .findFirst()
                .orElse(null);
    }

    /**
     * 根据枚举值获取枚举成员名称.
     * @param clazz 目标枚举类
     * @param value 枚举值
     * @param <T> 解析的枚举对象
     * @param <V> 传入的枚举值Value类型
     * @return {@link String}
     **/
    public static <T extends Enum<T> & BaseEnum<V>, V> String getNameByValue(final Class<T> clazz, final V value) {
        T t = EnumSet.allOf(clazz)
                .stream()
                .filter(x -> x.getValue().equals(value))
                .findFirst()
                .orElse(null);
        if (t != null) {
            return t.getName();
        }
        return String.valueOf(value);
//        return EnumSet.allOf(clazz)
//                .stream()
//                .filter(x -> {
//                    System.out.println(x);
//                    return x.getValue().equals(value);
//
//                })
//                .findFirst()
//                .map(BaseEnum::getName)
//                .orElse(String.valueOf(value));
    }
}
